package 双指针法;

import com.alibaba.fastjson.JSON;

public class No167两数之和_2 {

    //可以去看二分搜索的No167题目

    /**
     * 更优解是双指针结合二分搜索
     */

    public static int[] twoSum(int[] numbers, int target) {

        /**
         * 思路是什么?拿两个指针,一个最左一个最右,然后两个相加试一试
         * 如果加起来比目标大,就让右指针往左移
         * 如果加起来比目标小,就让左指针往右移
         * 临界点是两个指针相等,没有等于,等于就是一个元素了
         */
        int left=0;
        int right=numbers.length-1;

        int leftNum=0;
        int rightNum=0;
        int result=0;
        while(left<right){

            leftNum=numbers[left];
            rightNum=numbers[right];
            result=leftNum+rightNum;

            if(result==target)
                return new int[]{left+1,right+1};
            if(result>target){
                //结果大了,所以就需要右指针往左移动一格
                right--;
            }else{
                //结果小了,就需要左指针往右移动一格
                left++;
            }

        }

        return new int[]{-1,-1};
    }

    public static void main(String[] args) {

        int arr[]=new int[]{2, 7, 11, 15};
        int op[]=twoSum(arr,17);
        System.out.println(JSON.toJSONString(op));

    }

}
